/****************************************************************************\
 * @file     BR_Stat.c
 * @author   傅帅
 * @date     2019/12/25
 * @brief    统计任务
 *
 ******************************************************************************
 * @attent
 ****************************************************************************/
#include "FreeRTOS.h"
#include "task.h"
#include "BR_Common.h"

#if BR_configUSE_STAT == 1

/* 全局变量 */
float BR_CPU_Rate;
TaskHandle_t BR_StatTaskHandler;
/* 私有变量 */
static long long prvMaxIdleCount;
static volatile long long prvIdleCount;

/**
 * @brief  统计任务本体
 */
void BR_vStatTask(void)
{
    float TmpRate;
    while(1)
    {
        vTaskDelay(500);
        TmpRate = ( 1 - (float)prvIdleCount / (float)prvMaxIdleCount ) * 100;
        prvIdleCount = 0;
        if(TmpRate > 0 && TmpRate < 100)
        {
            BR_CPU_Rate = TmpRate;
            // BR_iPrintf(2, "FreeRTOS CPU rate:[ %.3f%% ]\r\n", BR_CPU_Rate);
        }
    }
}

/**
 * @brief  统计初始化
 */
void BR_vStatInit(void)
{
    /* 初始化MaxIdleCount */
    vTaskDelay(500);
    prvMaxIdleCount = prvIdleCount;
    prvIdleCount = 0;
}

void vApplicationIdleHook(void)
{
    prvIdleCount++;
}
#else  // 若未开启统计任务
float BR_CPU_Rate;
void vApplicationIdleHook(void){
}
#endif
